From 7b0a5674e2b34fd66fd7d7d9a3de0b169944f01b Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 10 Mar 2014 22:00:44 +0100 Subject: [PATCH] textview: Postpone magnifier creation until when needed This is only necessary for touch devices, so unlikely on many setups. --- gtk/gtktextview.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index b3c3bd15f5..34d5f6c74f 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -1545,11 +1545,20 @@ gtk_text_view_init (GtkTextView *text_view) G_CALLBACK (gtk_text_view_handle_dragged), text_view); g_signal_connect (priv->text_handle, "drag-finished", G_CALLBACK (gtk_text_view_handle_drag_finished), text_view); +} + +static void +_gtk_text_view_ensure_magnifier (GtkTextView *text_view) +{ + GtkTextViewPrivate *priv = text_view->priv; + + if (priv->magnifier_popover) + return; - priv->magnifier = _gtk_magnifier_new (widget); + priv->magnifier = _gtk_magnifier_new (GTK_WIDGET (text_view)); gtk_widget_set_size_request (priv->magnifier, 100, 60); _gtk_magnifier_set_magnification (GTK_MAGNIFIER (priv->magnifier), 2.0); - priv->magnifier_popover = gtk_popover_new (widget); + priv->magnifier_popover = gtk_popover_new (GTK_WIDGET (text_view)); gtk_style_context_add_class (gtk_widget_get_style_context (priv->magnifier_popover), GTK_STYLE_CLASS_OSD); gtk_popover_set_modal (GTK_POPOVER (priv->magnifier_popover), FALSE); @@ -3230,7 +3239,8 @@ gtk_text_view_finalize (GObject *object) if (priv->selection_bubble) gtk_widget_destroy (priv->selection_bubble); - gtk_widget_destroy (priv->magnifier_popover); + if (priv->magnifier_popover) + gtk_widget_destroy (priv->magnifier_popover); g_object_unref (priv->text_handle); g_object_unref (priv->im_context); @@ -4609,6 +4619,7 @@ gtk_text_view_show_magnifier (GtkTextView *text_view, GtkTextViewPrivate *priv; GtkAllocation allocation; + _gtk_text_view_ensure_magnifier (text_view); gtk_widget_get_allocation (GTK_WIDGET (text_view), &allocation); priv = text_view->priv; @@ -4718,7 +4729,9 @@ gtk_text_view_handle_drag_finished (GtkTextHandle *handle, GtkTextView *text_view) { gtk_text_view_selection_bubble_popup_set (text_view); - gtk_widget_hide (text_view->priv->magnifier_popover); + + if (text_view->priv->magnifier_popover) + gtk_widget_hide (text_view->priv->magnifier_popover); } static void @@ -7110,7 +7123,8 @@ gtk_text_view_end_selection_drag (GtkTextView *text_view) priv->grab_device); priv->grab_device = NULL; - gtk_widget_hide (priv->magnifier_popover); + if (priv->magnifier_popover) + gtk_widget_hide (priv->magnifier_popover); return TRUE; } -- 2.30.2